#pragma once

#include"Common.h"


// thread cache本质上是一个由自由链表构成的哈希桶
class ThreadCache
{
public:
    // 申请内存对象
    void* Allocate(size_t size);

    // 从central cache中获取内存对象
    void* FetchFromCentralCache(size_t index, size_t size);

    // 释放内存对象
    void Deallocate(void* ptr, size_t size);

    // 释放内存链表过长时, 回收一部分内存对象到central cache中
    void ListTooLong(FreeList& list, size_t size);


private:
    FreeList _freeLists[NFREELISTS];
};


// 线程通过TLS获取它专属的thread cache
// TLS - thread local storage
static __thread ThreadCache* pTLSThreadCache = nullptr;